<?php

// 商品类

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB;
use Session;

class SkuController extends Controller
{
	// 需要字段
	const fields = "s.id,s.name,s.price,s.vip,s.status,s.is_sold_out,s.desc,s.desc2";
	// 每页5条数据
	const per = 1;
	// 所有一级分类
	const all_pid = array(1,4,6,9);
	
	// 目的：获取分类导航
	// 参数：分类id数组 例：array(1,4,6,9)
	// 返回：对象
	public static function get_category_bar( $category=array() )
	{
		// 导航分类
		$category = DB::table('category')
				-> whereIn( 'id',$category )
				// 权重排序
				-> orderBy('sort','desc')
				// 只要6条
				-> take(6)
				-> get();
		if( count($category)>0 )
		{
			$return = array(
				'code'=>800,
				'data'=>$category
			);
			return $return; 
		}
		return array('code'=>400);
	}
	
	
	// 目的：通过搜索 获取商品列表
	// 参数：商品名称关键词
	// 返回：对象
	public function get_sku_by_search( Request $request )
	{
		// 获取搜索内容
		$data = $request->only('keywords');
		$keywords = isset($data['keywords']) ? $data['keywords'] : '';
		$skus = array();
		if( empty($keywords) )
		{
			// 关键词为空 获取全部商品
			$all_sku_data = self::get_all_sku();
			if( $all_sku_data['code']==800 )
			{
				// 批量获取 商品标签
				$skus = self::get_sku_tag( $all_sku_data['data'] );
			}
		}else
		{
			// 获取搜索相关的商品
			$all_sku = DB::table('sku as s')
				-> select( DB::raw(self::fields),DB::raw("replace(sp.pic_url,'/image','".config('app.imgPath')."/image' ) as pic_url ") )
				-> leftJoin('sku_pic as sp','sp.sku','=','s.id')
				// 封面
				-> where( 'sp.type',1)
				// 模糊查询
				-> where( 's.name','like',"%".$keywords."%" )
				// sku状态 1上架 2热卖 3新品 4已下架
				-> whereIn( 's.status',array(1,2,3) )
				-> orderBy( 's.create_at','desc' )
				-> paginate( self::per );
			if( count($all_sku)>0 )
			{
				// 批量获取 商品标签
				$skus = self::get_sku_tag( $all_sku );
			}
		}
		
		// 全部分类
		$all_category = self::get_category_bar( self::all_pid );
		$category = array();
		if( $all_category['code']==800 )
		{
			$category = $all_category['data'];
		}
		// 获取网站配置
		$web = $this->getConfig();
		return view( 'listing',[ 'skus'=>$skus,'common'=>$category,'web'=>$web ] );
	
	}
	
	
	// 目的：通过分类 获取商品列表
	// 参数：一级分类id
	// 返回：对象
	public function get_sku_by_category( $category_id='all' )
	{
		$skus = array();
		switch( $category_id )
		{
			// 无分类 默认全部
			case 'all':
				// 获取全部商品
				$all_sku_data = self::get_all_sku();
				if( $all_sku_data['code']==800 )
				{
					// 批量获取 商品标签
					$skus = self::get_sku_tag( $all_sku_data['data'] );
				}
			break;
			default:
				// 里面有 '/' 会导致路由报错
				// $category_id =  Controller::authcode( $category_id,'DECODE','wang',0 );
				// 有特定分类
				$all_sku = DB::table('sku as s')
					-> select( DB::raw(self::fields),DB::raw("replace(sp.pic_url,'/image','".config('app.imgPath')."/image' ) as pic_url ") )
					-> leftJoin('sku_pic as sp','sp.sku','=','s.id')
					-> leftJoin('category as c','c.id','=','s.category_id')
					// 封面
					-> where( 'sp.type',1)
					// 根据一级分类去找所有商品 
					-> where( 'c.pid',$category_id )
					// sku状态 1上架 2热卖 3新品 4已下架
					-> whereIn( 's.status',array(1,2,3) )
					-> orderBy( 's.create_at','desc' )
					-> paginate( self::per );
				if( count($all_sku)>0 )
				{
					// 批量获取 商品标签
					$skus = self::get_sku_tag( $all_sku );
				}
			break;
		
		}
		
		// 全部分类
		$all_category = $this::get_category_bar( self::all_pid );
		$category = array();
		if( $all_category['code']==800 )
		{
			$category = $all_category['data'];
		}
		// 获取网站配置
		$web = $this->getConfig();
		return view( 'listing',[ 'skus'=>$skus,'common'=>$category,'web'=>$web ] );
		
	}
	
	
	// 目的：通过标签 获取商品
	// 参数：标签id
	// 返回：对象
	public function get_sku_by_tag( $tag_id='all' )
	{
		$skus = array();
		switch( $tag_id )
		{
			// 无标签 默认全部
			case 'all':
				// 获取全部商品
				$all_sku_data = self::get_all_sku();
				if( $all_sku_data['code']==800 )
				{
					// 批量获取 商品标签
					$skus = self::get_sku_tag( $all_sku_data['data'] );
				}
			break;
			default:
				// 有标签
				$all_sku = DB::table('sku as s')
					-> select( DB::raw(self::fields),DB::raw("replace(sp.pic_url,'/image','".config('app.imgPath')."/image' ) as pic_url ") )
					-> leftJoin('sku_pic as sp','sp.sku','=','s.id')
					-> leftJoin('tag_record as tr','tr.record_id','=','s.id')
					// 封面
					-> where( 'sp.type',1 )
					// 商品类型
					-> where( 'tr.type','=',1 )
					// 专属标签
					-> where( 'tr.tag_id','=',$tag_id )
					// sku状态 1上架 2热卖 3新品 4已下架
					-> whereIn( 's.status',array(1,2,3) )
					-> orderBy( 's.create_at','desc' )
					-> paginate( self::per );
				if( count($all_sku)>0 )
				{
					// 批量获取 商品标签
					$skus = self::get_sku_tag( $all_sku );
				}
			break;
		
		}
		
		// 全部分类
		$all_category = self::get_category_bar( self::all_pid );
		$category = array();
		if( $all_category['code']==800 )
		{
			$category = $all_category['data'];
		}
		// 获取网站配置
		$web = $this->getConfig();
		return view( 'listing',[ 'skus'=>$skus,'common'=>$category,'web'=>$web ] );
	}
	
	
	// 获取全部商品
	// 返回：对象
	public static function get_all_sku()
	{
		
		$all_sku = DB::table('sku as s')
			-> select( DB::raw(self::fields),DB::raw("replace(sp.pic_url,'/image','".config('app.imgPath')."/image' ) as pic_url ") )
			-> leftJoin('sku_pic as sp','sp.sku','=','s.id')
			// 封面
			-> where( 'sp.type',1 )
			// sku状态 1上架 2热卖 3新品 4已下架
			-> whereIn( 's.status',array(1,2,3) )
			// 按发布时间
			-> orderBy( 's.create_at','desc' )
			-> paginate( self::per );
		if( count($all_sku)>0 )
		{
			$return = array(
				'code'=>800,
				'data'=>$all_sku
			);
			return $return; 
		}
		return array('code'=>400);
	}
	
	
	// 目的：获取分类下的商品
	// 参数：一级分类id数组 例：array( 1,4 )
	// 返回：数组
	public static function get_sku_by_pid( $pid = array() )
	{
		// 分类为空
		if( count($pid) < 1 )
		{
			$return = array(
				'skus'=>array(),
				'category'=>array()
			);
			return $return;
		}
		// 获取指定的导航分类 全部都是一级分类
		$category_data = self::get_category_bar( $pid );
		// 存放分类
		$category = array();
		// 商品
		$skus = array();
		if( $category_data['code']==800 )
		{
			// 分类
			$category = $category_data['data'];
			foreach( $category as $key => $info )
			{
				// sku状态 1上架 2热卖 3新品 4已下架
				// 热卖  会取8条数据
				$receive_data = self::get_sku_by_status( 2,$info->id );
				if( $receive_data['code']==800 )
				{
					// 批量获取 商品标签
					$skus[$key]['data'] = self::get_sku_tag( $receive_data['data'] );
					$skus[$key]['name'] = $info->name;
				}else
				{
					$skus[$key]['data'] = array();
					$skus[$key]['name'] = $info->name;
				}
			}
		}
		
		$return = array(
			'skus'=>$skus,
			'category'=>$category
		);
		return $return;
	
	}
	
	
	// 目的：通过状态 特定分类 获取商品
	// 参数：状态码 父类pid
	// 返回：对象
	public static function get_sku_by_status( $status=2,$pid )
	{
		
		// sku状态 1上架 2热卖 3新品 4已下架
		$allow = array(1,2,3,4);
		if( !in_array($status,$allow) )
		{
			return array('code'=>400);
		}
		if( empty($pid) )
		{
			return array('code'=>400);
		}
		
		// 获取商品
		$skus = DB::table('sku as s')
			-> select( DB::raw(self::fields),DB::raw("replace(sp.pic_url,'/image','".config('app.imgPath')."/image' ) as pic_url ") )
			-> leftJoin('sku_pic as sp','sp.sku','=','s.id')
			-> leftJoin('category as c','c.id','=','s.category_id')
			// 取封面
			-> where( 'sp.type',1)
			// 状态区分
			-> where( 's.status',$status )
			// 一级分类下的所有商品
			-> where( 'c.pid',$pid )
			// 最新在先
			-> orderBy( 's.create_at','desc' )
			// 只要8条
			-> take(8)
			-> get();
		if( count($skus)>0 )
		{
			$return = array(
				'code'=>800,
				'data'=>$skus
			);
			return $return;
		}
		return array('code'=>400);
		
	}
	
	
	// 目的：批量获取 商品标签
	// 参数：对象
	// 返回：对象
	public static function get_sku_tag( $skus )
	{
		foreach( $skus as $key => &$sku )
		{
			// 获取商品的所有标签
			$tags_info = DB::table('tag_record as tr')
					-> select( 't.id','t.name' )
					-> leftJoin( 'tag as t','t.id','=','tr.tag_id' )
					// 商品类型
					-> where( 'tr.type',1 )
					-> where( 'tr.record_id',$sku->id )
					-> get();
			$tag_arr = array();
			foreach( $tags_info as $ke => $tag_info )
			{
				// 存放到数组里
				// 标签id => 标签名
				$tag_arr[ $tag_info->id ] = $tag_info->name;
			}
			// 放到对象里
			$sku->tag_arr = $tag_arr;
			// $sku->part = '';
			// if( !empty($sku->desc) )
			// {
				// 只截取38个字
				// $sku->part = mb_substr( $sku -> desc,0,38  ).'...';
			// }
			
		}
		// 返回对象
		return $skus;
	}
	
	
	
}
